package com.example.shop_2302.utils

import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer
import java.util.concurrent.atomic.AtomicBoolean

/**
 * 数据倒灌
 */
class SingleLiveData<T>:MutableLiveData<T>() {
    //定义一个变量，用来观察数据是否发生了变化---对应的更新
    var flag = AtomicBoolean(false)//是否发生了变化 （原子性  多线程也会确保数据的单一性）


    override fun postValue(value: T) { 7
        flag.set(true)//数据发生了变化
        super.postValue(value)
    }
    //观察数据，操作数据   修改对应的状态
    override fun observe(owner: LifecycleOwner, observer: Observer<in T>) {
        super.observe(owner){
            if(flag.compareAndSet(true,false)){
                observer.onChanged(it)
            }
        }
    }
}